<?php

class LoginUserController extends Controller {

    function __construct() {
        parent::__construct();
        $this->loggin_type = 'loginuser';
    }

    public function index() {
        if(!Session::get('loggin_type')):
            //$this->set('planes_sm_ospe', $this->planes_ordenados("10"));
            //$this->set('planes_unimedica', $this->planes_ordenados("11"));
            $this->render();
        else: 
            $this->redirect_to('orden', 'nueva_orden');
        endif; 
    }

    function process() {
        $dni_titular = str_replace(".", "", $_POST['dni_titular']);
        $dni_solicitante = str_replace(".", "", $_POST['dni_solicitante']);
        $id_empresa = $_POST['empresa'];
        if (is_numeric($dni_titular) && is_numeric($dni_solicitante) && is_numeric($id_empresa)):
            Session::set('db', $id_empresa);
            update_db();
            if ($this->check($dni_titular, $dni_solicitante, $id_empresa)):
                $this->loggin(Afiliado::find_by_documento($dni_solicitante));
                
                $this->redirect_to('loginuser', 'leyenda');
            else:
                $this->redirect_to('loginuser', 'login');
            endif;
        else:
            $this->set_message('error', "Los datos ingresados no son válidos, por favor, intente de nuevo.");
            $this->redirect_to('loginuser', 'login');
        endif;
    }
    
    function login(){
        $this->render();
    }

    protected function check($dni_titular, $dni_solicitante, $id_empresa) {
        $empresa = Empresa::find($id_empresa);
        $titular = Afiliado::find(array(
                    'documento' => $dni_titular,
                    'parentesco' => 10,
                    'estado' => 1
                        )
        );
        
        $solicitante = Afiliado::find(array('documento' => $dni_solicitante, 'estado' => 1));
        if ($this->check_existencia($titular) && 
            $this->check_existencia($solicitante) &&
            $this->check_parentezco($titular, $solicitante) && 
            $this->check_empresa($solicitante, $empresa) &&
            $this->check_plan($solicitante)):
            return true;
        else:
            return false;
        endif;
    }

    function close() {
        Session::destroy();
        $this->redirect_to('loginuser', 'index');
    }
    
    function leyenda(){
        $this->render('leyenda');
    }

    // nothing to do before load
    function before_load() {
        
    }
    
    /* Se obtienen los planes ordenados según la cantidad de afiliados */
    function planes_ordenados($database_index){
        Plan::switch_connection($database_index);
        $planes = Plan::find_by_sql(
                    "SELECT planes.*, count( gruposfamiliares.plan ) AS CantPlan
                        FROM gruposfamiliares, afiliados, planes
                        WHERE gruposfamiliares.idGrupoFamiliar = afiliados.grupoFamiliar
                              AND gruposfamiliares.plan = planes.idPlan
                              AND planes.idPlan >= 10
                              AND planes.web_uso = 1
                     GROUP BY planes.siglas
                     ORDER BY CantPlan DESC"
                    );
        return $planes;
    }
    
    function check_existencia($user){
        if(!$user){
            $this->set_message('error', MSJ_ERROR_USER);
            return false;
        }
        return true;
    }
    
    function check_parentezco($titular, $solicitante){
        if($solicitante->es_pariente($titular)):
            return true;
        else:
            $this->set_message('error', MSJ_ERROR_PARENTEZCO);
            return false;
        endif;
    }
    
    function check_empresa($solicitante, $empresa){
        if($solicitante->pertenece_empresa($empresa)):
            return true;
        else:
            $this->set_message('error', MSJ_ERROR_EMPRESA);
            return false;
        endif;
    }
    
    function check_plan($solicitante){
        if($solicitante->_grupo->_plan->habilitado()):
            return true;
        else:
            $this->set_message('error', MSJ_ERROR_PLAN);
            return false;
        endif;
    }
}

?>
